package NO2_String;

import java.util.HashMap;
import java.util.Map;

/**
 * 2025-08-26
 * 力扣 - 3. 无重复字符的最长子串
 * <p>
 * 给定一个字符串 s ，请你找出其中不含有重复字符的 最长 子串 的长度。
 */
public class LengthOfLongestSubstringMain {
    public static void main(String[] args) {
        System.out.println(lengthOfLongestSubstring("abcabcbb"));
    }

    public static int lengthOfLongestSubstring(String s) {
        Map<Character, Integer> map = new HashMap<>();
        int left = 0;
        int maxLength = 0;

        for (int right = 0; right < s.length(); right++) {
            char currentChar = s.charAt(right);

            // 如果当前字符已存在，并且其位置在left之后（在当前窗口内）
            if (map.containsKey(currentChar) && map.get(currentChar) >= left) {
                // 直接跳转到重复字符的下一个位置
                left = map.get(currentChar) + 1;
            }

            // 更新字符的最新位置
            map.put(currentChar, right);

            // 更新最大长度
            maxLength = Math.max(maxLength, right - left + 1);
        }

        return maxLength;
    }
}
